package com.ruoyi.grade.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.grade.domain.SingleGradeRankMoudle;
import com.ruoyi.grade.domain.TotalGradeRankMoudle;
import com.ruoyi.grade.domain.entity.Student;
import com.ruoyi.grade.domain.entity.StudentCourseGrade;
import com.ruoyi.grade.domain.entity.StudentPhysicalGrade;
import com.ruoyi.grade.domain.entity.StudentTotalGrade;
import com.ruoyi.grade.mapper.StudentPhysicalGradeMapper;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * IAdminService接口继承自IService，专门处理管理员相关的服务请求。
 * 它提供了获取学生成绩排名、删除学生信息、添加学生信息等功能。
 */
@Service
public interface IAdminService extends IService<StudentCourseGrade> {

    /**
     * 获取所有学生的总成绩排名信息。
     *
     * @return 包含所有学生总成绩排名信息的列表。
     */
    List<TotalGradeRankMoudle> getTotalStudentGradeRank(String userName);

    /**
     * 根据课程名称获取某门课程的成绩排名信息。
     *
     * @param userName 学生姓名。
     * @param courseName 课程名称。
     * @return 包含指定课程成绩排名信息的列表。
     */
    List<SingleGradeRankMoudle> getSingleCourseGradeRank(String userName, String courseName);

    /**
     * 删除指定学生的信息。
     *
     * @param studentId 学生ID。
     * @return 删除操作的结果信息。
     */
    String deleteStudentMessage(String studentId);

    /**
     * 获取指定学生的总成绩排名信息。
     *
     * @param studentId 学生ID。
     * @return 指定学生的总成绩排名信息。
     */
    List<StudentTotalGrade> getOneTotalGradeRank(String studentId);

    /**
     * 获取指定学生在某门课程的成绩排名信息。
     *
     * @param studentId 学生ID。
     * @param courseName 课程名称。
     * @return 指定学生在指定课程的成绩排名信息。
     */
    SingleGradeRankMoudle getOneSingleGradeRank(String studentId, String courseName);

    /**
     * 删除指定学年和学期的学生信息。
     *
     * @param academicYear 学年。
     * @param semester 学期。
     * @return 删除操作的结果信息。
     */
    String deleteAcademicYearSemesterMessage(String academicYear,String semester);

    /**
     * 添加学生信息。
     *
     * @param student 学生对象。
     * @return 添加操作的结果信息。
     */
    String addStudentMessage(Student student);

    /**
     * 获取指定学生的体质健康成绩信息。
     *
     * @param studentId 学生ID。
     * @param academicYear 学年。
     * @return 指定学生的体质健康成绩信息。
     */
    StudentPhysicalGrade getStudentPhysicalGrade(String studentId, String academicYear);

    /**
     * 根据专业获取所有学生的总成绩信息。
     *
     * @param major 专业名称。
     * @return 包含指定专业所有学生总成绩信息的列表。
     */
    List<StudentTotalGrade> getAllStudentTotalGradeByMajor(String major);
}
